/*
  小麻烦
  题目描述
    安东诺夫再一次打开了《战舰世界》。
    这次他打算去玩玩剧情模式，并且选择了那莱。
    他开出了魏玛，打算去上路单杀 AI 的航母列克星敦。
    然而在单杀航母的路上，他可能会遇到两大劫难的其中一个：
      1.  被 AI 的战列舰怀俄明号一轮秒杀。
      2.  遇到 AI 的战列舰密苏里，号称 小麻烦。被小麻烦一轮秒杀。
    如果他躲过了这两大劫难，就能带着队友赢得剧情。
  输入
    第一行两个整数  n, m (1 ≤ n, m ≤ 10^5)。
      n 表示他有 n 局那莱剧情躲过了第一个劫难;
      m 表示他有 m 局那莱剧情躲过了第二个劫难。
    第二行有 n 个一定不重复的整数，表示躲过了第一个劫难的对局编号。
    第三行有 m 个一定不重复的整数，表示躲过了第二个劫难的对局编号。
    对局编号不大于 10^9 。
  输出
    安东诺夫最后获得胜利的对局，按照在输入格式第二行中输入的顺序输出。
  样例输入
    4 3
    2 15 6 8
    8 9 2
  样例输出
    2 8
*/

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n, m;
    int ai[100001] = {}; // 存放第二行输入的 n 个不重复的数 (躲过了第一个劫难的对局编号)
    set <int> a; // 存放第三行输入的 m 个不重复的数 (躲过了第二个劫难的对局编号)。
                 // 这里使用 set 容器，是利用其自动去重的功能!

    cin >> n >> m;

    for (int i = 1; i <= n; i++) {
        cin >> ai[i];
    }

    for (int i = 1; i <= m; i++) {
        int x;
        cin >> x;
        a.insert(x);
    }

    // 找出 2 组数中相同的数, 这样的数代表的对局才可以赢得胜利!
    //  (同时躲过了第一个和第二个劫难的对局，才可以赢得胜利!)
    for (int i = 1; i <= n; i++) {
        // 由于 set 容器有自动去重的功能，如果往容器中插入一个数后，容器的大小没有变化，
        // 说明容器中存在本来就存在和新插入的数相同的数!
        int x = ai[i];
        int num = a.size();
        a.insert(x);
        if (a.size() == num) {
            cout << x << " ";
        }
    }

    return 0;
}